home *** CD-ROM | disk | FTP | other *** search
/ Visual Cafe 3 / Visual Cafe 3.ISO / Vcafe / JFC.bin / MacDesktopPaneUI.java < prev    next >
Text File  |  1998-06-30  |  6KB  |  173 lines

  1. /*
  2.  * @(#)MacDesktopPaneUI.java    1.4 98/01/30
  3.  *
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  *
  19.  */
  20.  
  21.  
  22. package com.sun.java.swing.plaf.mac;
  23.  
  24. import com.sun.java.swing.*;
  25. import java.awt.Rectangle;
  26. import java.awt.Dimension;
  27. import java.awt.Insets;
  28. import java.awt.Color;
  29. import java.awt.Graphics;
  30. import com.sun.java.swing.plaf.*;
  31.  
  32.  
  33. /**
  34.  * @version @(#)MacDesktopPaneUI.java    1.0 11/24/97
  35.  * @author Symantec
  36.  */
  37.  
  38. public class MacDesktopPaneUI extends DesktopPaneUI
  39. {
  40.     JDesktopPane desktop;
  41.     DesktopManager desktopManager;
  42.  
  43. /// DesktopPaneUI methods
  44.     public static ComponentUI createUI(JComponent d)    {
  45.         return new MacDesktopPaneUI();
  46.     }
  47.  
  48.     public MacDesktopPaneUI() {
  49.     }
  50.  
  51.     public void installUI(JComponent c)   {
  52.     desktop = (JDesktopPane)c;
  53.     if(desktop.getDesktopManager() == null) {
  54.         desktopManager = new MacDesktopManager();
  55.         desktop.setDesktopManager(desktopManager);
  56.     }
  57.     /// PENDING(klobad) should handle iconified frames properly
  58.     }
  59.  
  60.     public void uninstallUI(JComponent c) {
  61.     if(desktop.getDesktopManager() == desktopManager) {
  62.         desktop.setDesktopManager(null);
  63.     }
  64.     desktop = null;
  65.     }
  66.  
  67.     public void paint(Graphics g, JComponent c) {}
  68.     public Dimension getPreferredSize(JComponent c) {return null;}
  69.     public Dimension getMinimumSize(JComponent c) {return new Dimension(0, 0);}
  70.     public Dimension getMaximumSize(JComponent c) {
  71.     return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
  72.     }
  73.     public Insets getInsets(JComponent c) {return new Insets(0,0,0,0);}
  74.  
  75. ////////////////////////////////////////////////////////////////////////////////////
  76. ///  DragPane class
  77. ////////////////////////////////////////////////////////////////////////////////////
  78.     private class DragPane extends JComponent {
  79.     public void paint(Graphics g) {
  80.         g.setColor(Color.darkGray);
  81.         g.drawRect(0, 0, getWidth()-1, getHeight()-1);
  82.     }
  83.     };
  84.  
  85. ////////////////////////////////////////////////////////////////////////////////////
  86. ///  MacDesktopManager class
  87. ////////////////////////////////////////////////////////////////////////////////////
  88.     private class MacDesktopManager extends DefaultDesktopManager {
  89.         JComponent dragPane;
  90.         boolean usingDragPane;
  91.  
  92.     // PENDING(klobad) this should be optimized
  93.     public void setBoundsForFrame(JComponent f, int newX, int newY, 
  94.             int newWidth, int newHeight) {
  95.     if(!usingDragPane) {
  96.             boolean didResize;
  97.             didResize = (f.getWidth() != newWidth || f.getHeight() != newHeight);
  98.         Rectangle r = f.getBounds();
  99.         f.setBounds(newX, newY, newWidth, newHeight);        
  100.         SwingUtilities.computeUnion(newX, newY, newWidth, newHeight, r);
  101.         f.getParent().repaint(r.x, r.y, r.width, r.height);
  102.         if(didResize) {
  103.             f.validate();
  104.           }
  105.     } else {
  106.         Rectangle r = dragPane.getBounds();
  107.         dragPane.setBounds(newX, newY, newWidth, newHeight);        
  108.         SwingUtilities.computeUnion(newX, newY, newWidth, newHeight, r);
  109.         dragPane.getParent().repaint(r.x, r.y, r.width, r.height);
  110.     }
  111.     }
  112.  
  113.     public void beginDraggingFrame(JComponent f) {    
  114.     usingDragPane = false;
  115.     if(f.getParent() instanceof JLayeredPane) {
  116.         if(dragPane == null)
  117.         dragPane = new DragPane();
  118.         JLayeredPane p = (JLayeredPane)f.getParent();
  119.         p.setLayer(dragPane, Integer.MAX_VALUE);
  120.         dragPane.setBounds(f.getX(), f.getY(), f.getWidth(), f.getHeight());
  121.         p.add(dragPane);
  122.         usingDragPane = true;
  123.     }
  124.     }
  125.  
  126.     public void dragFrame(JComponent f, int newX, int newY) {
  127.     setBoundsForFrame(f, newX, newY, f.getWidth(), f.getHeight());
  128.     }
  129.  
  130.     public void endDraggingFrame(JComponent f) {
  131.     if(usingDragPane) {
  132.         JLayeredPane p = (JLayeredPane)f.getParent();
  133.         p.remove(dragPane);
  134.         usingDragPane = false;
  135.             setBoundsForFrame(f, dragPane.getX(), dragPane.getY(), 
  136.                 dragPane.getWidth(), dragPane.getHeight());
  137.     }
  138.     }
  139.  
  140.     public void beginResizingFrame(JComponent f, int direction) {
  141.     usingDragPane = false;
  142.     if(f.getParent() instanceof JLayeredPane) {
  143.         if(dragPane == null)
  144.         dragPane = new DragPane();
  145.         JLayeredPane p = (JLayeredPane)f.getParent();
  146.         p.setLayer(dragPane, Integer.MAX_VALUE);
  147.         dragPane.setBounds(f.getX(), f.getY(), 
  148.                 f.getWidth(), f.getHeight());
  149.         p.add(dragPane);
  150.         usingDragPane = true;
  151.     }
  152.     }
  153.  
  154.     public void resizeFrame(JComponent f, int newX, int newY, 
  155.                 int newWidth, int newHeight) {
  156.     setBoundsForFrame(f, newX, newY, newWidth, newHeight);
  157.     }
  158.  
  159.     public void endResizingFrame(JComponent f) {
  160.     if(usingDragPane) {
  161.         JLayeredPane p = (JLayeredPane)f.getParent();
  162.         p.remove(dragPane);
  163.         usingDragPane = false;
  164.             setBoundsForFrame(f, dragPane.getX(), dragPane.getY(), 
  165.                 dragPane.getWidth(), dragPane.getHeight());
  166.     }
  167.     }
  168.  
  169.     }; /// END of MacDesktopManager
  170.  
  171. }
  172.  
  173.